package com.syl.starter.itools.common.utils;

//import com.syl.starter.itools.base.constants.BaseConstant;
//import com.syl.starter.itools.base.utils.LogUtils;
//import org.apache.tomcat.util.codec.binary.Base64;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import sun.misc.BASE64Decoder;
//import javax.crypto.Cipher;
//import java.security.KeyFactory;
//import java.security.PrivateKey;
//import java.security.PublicKey;
//import java.security.spec.PKCS8EncodedKeySpec;
//import java.security.spec.X509EncodedKeySpec;
//
///**
// * @author syl
// * @create 2018-08-15 14:47
// **/
//public class RasUtils {
//    private static final String RSA = "RSA";
//    private static Logger LOG = LoggerFactory.getLogger(RasUtils.class);
//
//    /**
//     * 把字符串转换为标准公钥
//     * @param key 不能随便写
//     * 参照 https://www.bejson.com/enc/rsa/
//     * @throws Exception
//     */
//    private static PublicKey getPublicKey(String key) throws Exception {
//        String str = key.replaceAll(BaseConstant.LINE_BREAK, BaseConstant.EMPTY_STRING);
//        byte[] keyBytes;
//        keyBytes = (new BASE64Decoder()).decodeBuffer(str);
//        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
//        KeyFactory keyFactory = KeyFactory.getInstance(RSA);
//        PublicKey publicKey = keyFactory.generatePublic(keySpec);
//        return publicKey;
//    }
//
//    /**
//     * 把字符串转换为标准私钥
//     * @param key 不能随便写
//     * 参照 https://www.bejson.com/enc/rsa/
//     * @throws Exception
//     */
//    private static PrivateKey getPrivateKey(String key) throws Exception {
//        String str = key.replaceAll(BaseConstant.LINE_BREAK, BaseConstant.EMPTY_STRING);
//        byte[] keyBytes;
//        keyBytes = (new BASE64Decoder()).decodeBuffer(str);
//        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
//        KeyFactory keyFactory = KeyFactory.getInstance(RSA);
//        PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
//        return privateKey;
//    }
//
//    //************************加密解密**************************
//
//    /**
//     * 加密
//     * @param plainText
//     * @param publicKey 公钥不能随便写 请按照一定格式生成
//     * 参照 https://www.bejson.com/enc/rsa/
//     * @return
//     */
//    public static String encrypt(String plainText, String publicKey){
//        byte[] bytes;
//        try {
//            bytes = encrypt(plainText.getBytes(), publicKey);
//            return Base64.encodeBase64String(bytes);
//        } catch (Exception e) {
//            LogUtils.error(LOG,"ras加密失败 请检查公钥格式是否正确", e);
//        }
//        return null;
//    }
//
//    /**
//     * 加密
//     * @param plainText
//     * @param publicKey 公钥不能随便写 请按照一定格式生成
//     * 参照 https://www.bejson.com/enc/rsa/
//     * @return
//     */
//    public static byte[] encrypt(byte[] plainText, String publicKey) throws Exception {
//        PublicKey publicKey_ = getPublicKey(publicKey);
//        Cipher cipher = Cipher.getInstance(RSA);
//        cipher.init(Cipher.ENCRYPT_MODE, publicKey_);
//        byte[] bt_encrypted = cipher.doFinal(plainText);
//        return bt_encrypted;
//    }
//
//    /**
//     * ras 字符串解密 默认使用UTF-8编码
//     * @param encrypted
//     * @param privateKey
//     * @return
//     */
//    public static String decrypt(String encrypted, String privateKey){
//        return decrypt(encrypted,privateKey,BaseConstant.UTF8);
//    }
//
//    /**
//     * ras 字符串解密
//     * @param encrypted 加密文本
//     * @param privateKey 私钥
//     * @param encoding 字符串编码 可以为空
//     * @return
//     */
//    public static String decrypt(String encrypted, String privateKey, String encoding){
//        try {
//            byte[] decrypt = decrypt(Base64.decodeBase64(encrypted), privateKey);
//            return encoding == null ? new String(decrypt) : new String(decrypt,encoding);
//        } catch (Exception e) {
//            LogUtils.error(LOG,"ras解密失败 请检查私钥格式是否正确", e);
//        }
//        return null;
//    }
//
//    /**
//     * ras 字符串解密
//     * @param encrypted
//     * @param privateKey
//     * @return
//     * @throws Exception
//     */
//    private static byte[] decrypt(byte[] encrypted, String privateKey) throws Exception {
//        PrivateKey privateKey_ = getPrivateKey(privateKey);
//        Cipher cipher = Cipher.getInstance(RSA);
//        cipher.init(Cipher.DECRYPT_MODE, privateKey_);
//        byte[] bt_original = cipher.doFinal(encrypted);
//        return bt_original;
//    }
//
//}
